/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.common;

import applicationexcepcion.ModeratoreSenzaCodiceFiscale;
import common.Stato;
import entity.Moderatore;
import facade.ModeratoreFacade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Valerio
 */
@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class ModeratoreManager implements ModeratoreManagerLocal {
    @PersistenceContext(unitName = "E-Market-ejbPU")
    private EntityManager em;
    @EJB
    private ModeratoreFacade moderatoreFacade;

    @Override
    public List<Moderatore> cercaTutto() {
        return moderatoreFacade.findAll();
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public void creaModeratore(Moderatore moderatore) throws ModeratoreSenzaCodiceFiscale{
        if(moderatore.getCodiceFiscale()==null){
            throw new ModeratoreSenzaCodiceFiscale();
        }
        Query q=em.createNamedQuery("persona.cercaPerCodiceFiscale");
        q.setParameter(1, moderatore.getCodiceFiscale());
        if(!q.getResultList().isEmpty()){
            return;
        }
        moderatoreFacade.create(moderatore);
    }

    @Override
    public void bloccaModeratore(Moderatore moderatore) {
        moderatore.getAccount().setStato(Stato.Bloccato);
        moderatoreFacade.edit(moderatore);
    }

    @Override
    public void bannaModeratore(Moderatore moderatore) {
        moderatore.getAccount().setStato(Stato.Bannato);
        moderatoreFacade.edit(moderatore);
    }

    @Override
    public Moderatore cercaPerId(Long id) {
        return moderatoreFacade.find(id);
    }

    @Override
    public void abilitaModeratore(Moderatore moderatore) {
        moderatore.getAccount().setStato(Stato.Attivo);
        moderatoreFacade.edit(moderatore);
    }
}
